/*************************************************************************
	> File Name: HasPtr.h
	> Author: likang
	> Mail:  
	> Created Time: 2015年01月01日 星期四 18时57分18秒
 ************************************************************************/

#include<iostream>
#include "U_ptr.h"
class HasPtr {
public:
	//构造函数，p必须是已经被动态分配内存的
	HasPtr(int *p,int i): ptr(new U_Ptr(p)), val(i) {}
	//复制控制函数
	HasPtr(const HasPtr &orig): ptr(orig.ptr), val(orig.val) {++ptr->use;}
	//赋值函数,在类外面定义
	HasPtr &operator=(const HasPtr &orig);
	//析构函数
	~HasPtr() { if (--ptr->use == 0) delete ptr;}
	
	int *get_ptr() const {return ptr->ip;}
	int get_int() const {return val;}

	void set_ptr(int *p) {ptr->ip = p;}
	void set_int(int i) {val = i;}

	int get_ptr_val() const {return *ptr->ip;}
	void set_ptr_val(int i) {*ptr->ip = i;}

	int get_ptr_use() const {return ptr->use;}



private:
	U_Ptr *ptr;
	int val;
};
